#ifndef __XGU_FUNCTOR10_H__
#define __XGU_FUNCTOR10_H__

namespace xgu
{
	// -----------------------------------------------------------
	// 10 Arguments
	template <typename TRet = void, 
		typename TArg0 = void, 
		typename TArg1 = void, 
		typename TArg2 = void, 
		typename TArg3 = void, 
		typename TArg4 = void, 
		typename TArg5 = void, 
		typename TArg6 = void, 
		typename TArg7 = void, 
		typename TArg8 = void, 
		typename TArg9 = void>
	class Functor
	{
	public:
		virtual ~Functor() {};
		virtual TRet operator() (TArg0, TArg1, TArg2, TArg3, TArg4, 
			TArg5, TArg6, TArg7, TArg8, TArg9) = 0;
		virtual bool operator== (const Functor<TRet, TArg0, TArg1, TArg2, TArg3, TArg4, 
			TArg5, TArg6, TArg7, TArg8, TArg9>& lhs) const
		{ return false; }
		virtual Functor<TRet, TArg0, TArg1, TArg2, TArg3, TArg4, 
			TArg5, TArg6, TArg7, TArg8, TArg9>* Clone() const = 0;
	};
}

#endif